<?php
declare (strict_types=1);

// +----------------------------------------------------------------------
// | SCApi
// +----------------------------------------------------------------------
// | 版权所有 2021~2022 贾二小 [ http://www.ipsoul.com ]
// +----------------------------------------------------------------------
// | 官方网站: http://www.ipsoul.com
// +----------------------------------------------------------------------
// | 开源协议 ( https://mit-license.org )
// | 免费声明 ( http://doc.ipsoul.com/disclaimer )
// +----------------------------------------------------------------------
// | gitee 代码仓库：https://gitee.com/jiaerxiao/scapi
// | github 代码仓库：https://github.com/jiaerxiao/scapi
// +----------------------------------------------------------------------

namespace app\system\job;

use app\system\facade\LogFacade;
use think\queue\Job;

/**
 * 日志队列
 * @author 贾二小
 * @since 2021/11/28
 */
class Log
{
    /**
     * 执行的任务
     * @author 贾二小
     * @since 2021/11/28
     */
    private function execute($data): bool
    {
        try {
            $id = LogFacade::insertData($data);
            if ($id > 0) {
                return true;
            } else {
                return false;
            }
        } catch (\Exception $e) {
            return false;
        }
    }

    public function fire(Job $job, $data)
    {
        //....这里执行具体的任务
        if ($this->execute($data)) {
            //如果任务执行成功后 记得删除任务，不然这个任务会重复执行，直到达到最大重试次数后失败后，执行failed方法
            $job->delete();
        }
        if ($job->attempts() > 3) {
            //通过这个方法可以检查这个任务已经重试了几次了
            $job->delete();
        }

    }

    public function failed($data)
    {
        // ...任务达到最大重试次数后，失败了
    }
}